import * as path from 'path';

/**
 * Fuzz 命名工具类
 * 负责生成符合 OpenHarmony 规范的 Fuzzer 名称
 */
export class FuzzNameUtils {
    /**
     * 生成 Fuzzer 名称：xxx_fuzzer（只允许一个下划线）
     * @param sourceFile 源文件路径
     * @returns 简化的 fuzzer 名称，如 daudiosourcemanager_fuzzer
     */
    public static generateFuzzerName(sourceFile: string): string {
        const baseName = path.basename(sourceFile, path.extname(sourceFile));
        const baseNameSimplified = baseName
            .toLowerCase()
            .replace(/_/g, '')  // 移除所有下划线
            .replace(/[^a-z0-9]/g, '');  // 移除其他特殊字符
        
        return `${baseNameSimplified}_fuzzer`;
    }

    /**
     * 生成基于函数名的 Fuzzer 名称
     * @param functionName 函数名
     * @returns 简化的 fuzzer 名称
     */
    public static generateFuzzerNameForFunction(functionName: string): string {
        const simplified = functionName
            .toLowerCase()
            .replace(/_/g, '')  // 移除所有下划线
            .replace(/[^a-z0-9]/g, '');  // 移除其他特殊字符
        
        return `${simplified}_fuzzer`;
    }

    /**
     * 将 fuzzer 名称转换为 CamelCase（用于 GN target 名称）
     * @param fuzzerName fuzzer 名称，如 daudiosourcemanager_fuzzer
     * @returns CamelCase 名称，如 DaudiosourcemanagerFuzzerTest
     */
    public static toCamelCase(fuzzerName: string): string {
        return fuzzerName
            .split('_')
            .map(word => word.charAt(0).toUpperCase() + word.slice(1))
            .join('');
    }

    /**
     * 提取基础名称（不带扩展名）
     */
    public static getBaseName(sourceFile: string): string {
        return path.basename(sourceFile, path.extname(sourceFile));
    }
}

